package com.xiaobao.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.http.HttpStatus;

import java.io.Serializable;

@Data
@AllArgsConstructor
//Result 类用于封装 API 响应结果，包括是否成功、状态码、消息和数据等。
public class Result<T> implements Serializable {
    private boolean success;        // 是否成功（必选）
    private int status;             // HTTP 状态码（如 200、400）
    private String message;         // 操作结果描述（如“登录成功”“参数错误”）
    private T data;                 // 响应数据（成功时返回，失败时为 null）

    // ======================= 成功响应构造方法 =======================
    /**
     * 成功响应（带数据）
     */
    public Result(T data) {
        this.success = true;
        this.status = HttpStatus.OK.value();
        this.message = "操作成功";
        this.data = data;
    }

    /**
     * 成功响应（无数据，如 DELETE 请求）
     */
    public Result() {
        this.success = true;
        this.status = HttpStatus.OK.value();
        this.message = "操作成功";
        this.data = null;
    }

    /**
     * 自定义成功响应（用于非 200 状态码，如 201 Created）
     */
    public Result(HttpStatus httpStatus, T data, String message) {
        this.success = true;
        this.status = httpStatus.value();
        this.message = message;
        this.data = data;
    }
    // ======================= 失败响应构造方法 =======================
    // ======================= 失败响应构造方法 =======================
    /**
     * 失败响应（带错误信息）
     */
    public Result(HttpStatus httpStatus, String message) {
        this.success = false;
        this.status = httpStatus.value();
        this.message = message;
        this.data = null;
    }

    /**
     * 失败响应（带详细技术信息，仅开发环境使用）
     */
    public Result(HttpStatus httpStatus, String message, String code, String details) {
        this.success = false;
        this.status = httpStatus.value();
        this.message = message;
        this.data = null;
    }
}